Programmable integrated circuits (ICs) are devices that can be programmed to perform specified logic functions. One type of programmable IC, the field programmable gate array (FPGA), typically includes an array of programmable tiles. These programmable tiles comprise various types of logic blocks, which can include, for example, input/output blocks (IOBs), configurable logic blocks (CLBs), dedicated random access memory blocks (BRAM), multipliers, digital signal processing blocks (DSPs), processors, clock managers, delay lock loops (DLLs), bus or network interfaces such as Peripheral Component Interconnect Express (PCIe) and Ethernet and so forth.
Each programmable tile may include both programmable interconnect and programmable logic. The programmable interconnect typically includes a large number of interconnect lines of varying lengths interconnected by programmable interconnect points (PIPs). The programmable logic implements the logic of a user design using programmable elements that can include, for example, function generators, registers, arithmetic logic, and so forth.
The programmable interconnect and programmable logic are typically programmed by loading a configuration data stream into internal configuration memory cells that define how the programmable elements are configured. The configuration data can be read from memory (e.g., from an external PROM) or written into the FPGA by an external device. The collective states of the individual memory cells then determine the function of the FPGA.
Some programmable ICs include an embedded processor that is capable of executing program code. The processor can be fabricated as part of the same die that includes the programmable logic circuitry and the programmable interconnect circuitry, also referred to collectively as the “programmable circuitry” of the IC. It should be appreciated that execution of program code within a processor is distinguishable from “programming” or “configuring” the programmable circuitry that may be available on an IC. The act of programming or configuring programmable circuitry of an IC results in the implementation of different physical circuitry as specified by the configuration data within the programmable circuitry.
In some implementations, a processor of a programmable IC may utilize memory virtualization to provide more usable memory to programs. Each program executed on the processor operates as if it has access to a large portion of continuous computer memory, e.g., random access memory (RAM). Even though the physical memory used by a program may be fragmented and/or overflow onto disk storage, the program may use a virtual memory address to operate as though it is accessing a continuous collection of memory addresses. Virtual memory also allows each executing program to function as if it has access to the entirety of the physical memory of the host computer at any given time, despite having access to only a portion of the physical memory.
Implementation of virtual memory requires hardware components that aid the processor in translating virtual memory addresses (virtual addresses) utilized by the program into physical memory addresses (physical addresses) used by the hardware to read and write to memory on behalf of the program. A memory management unit is tasked with translating virtual memory addresses to physical memory addresses. The memory management unit handles memory accesses that are requested by the processor.